home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / demo / rotplnnr.lha / inconv.c < prev    next >
C/C++ Source or Header  |  1994-08-12  |  4KB  |  219 lines

  1. // InterConvert -- converts internal formats
  2.  
  3. #include <proto/dos.h>
  4.  
  5. #include <string.h>
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8.  
  9. #include "RoutePlanner.h"
  10.  
  11. BOOL OpenDatabase(char *filename);
  12. BOOL SaveDatabase(char *filename);
  13. BOOL RedoMemory(ULONG NeededCityEntries, ULONG NeededRouteEntries);
  14.  
  15. ULONG cdcount, rdcount;
  16.  
  17. APTR memptr;
  18.  
  19. struct OldCityData *cd;
  20. struct OldRouteData *rd;
  21.  
  22. struct NewCityData *ncd;
  23. struct NewRouteData *nrd;
  24.  
  25. BOOL OpenDatabase(char *filename)
  26. {
  27.   APTR tmemptr;
  28.   BPTR fhandle;
  29.   __aligned struct FileInfoBlock fib;
  30.   ULONG *temp;
  31.   
  32.   fhandle=Open(filename,MODE_OLDFILE);
  33.   if(!fhandle) return FALSE;
  34.   
  35.   if(!ExamineFH(fhandle,&fib))
  36.     {
  37.     Close(fhandle);
  38.     return FALSE;
  39.     }
  40.   
  41.   tmemptr=malloc(fib.fib_Size);
  42.   if(!tmemptr)
  43.     {
  44.     Close(fhandle);
  45.     return FALSE;
  46.     }
  47.   
  48.   FRead(fhandle,tmemptr,1,fib.fib_Size);
  49.   Close(fhandle);
  50.   
  51.   temp=(ULONG *)tmemptr;
  52.   if((*temp)!='RPLN')
  53.     {
  54.     return FALSE;
  55.     }
  56.   
  57.   memptr=tmemptr;
  58.   
  59.   cd=(struct OldCityData *)((char *)memptr+12);
  60.   temp=(ULONG *)((char *)(cd)-4);
  61.   cdcount=*temp;
  62.   
  63.   rd=(struct OldRouteData *)
  64.     ((char *)memptr+(sizeof(struct OldCityData)*(cdcount)+20));
  65.   
  66.   temp=(ULONG *)((char *)(rd)-4);
  67.   rdcount=*temp;
  68.   
  69.   return TRUE;
  70. }
  71.  
  72. BOOL SaveDatabase(char *filename)
  73. {
  74.   BPTR fhandle;
  75.   ULONG id='RPL1', cid='CITY', rid='ROAD';
  76.   LONG err;
  77.   
  78.   fhandle=Open(filename,MODE_NEWFILE);
  79.   if(!fhandle) return FALSE;
  80.   
  81.   SetIoErr(0L);
  82.   FWrite(fhandle,&id,sizeof(id),1);
  83.   err=IoErr();
  84.   if(err)
  85.     {
  86.     Close(fhandle);
  87.     return FALSE;
  88.     }
  89.   
  90.   SetIoErr(0L);
  91.   FWrite(fhandle,&cid,sizeof(cid),1);
  92.   err=IoErr();
  93.   if(err)
  94.     {
  95.     Close(fhandle);
  96.     return FALSE;
  97.     }
  98.   
  99.   SetIoErr(0L);
  100.   FWrite(fhandle,&cdcount,sizeof(cdcount),1);
  101.   err=IoErr();
  102.   if(err)
  103.     {
  104.     Close(fhandle);
  105.     return FALSE;
  106.     }
  107.   
  108.   SetIoErr(0L);
  109.   FWrite(fhandle,&ncd[0],sizeof(struct NewCityData),cdcount);
  110.   err=IoErr();
  111.   if(err)
  112.     {
  113.     Close(fhandle);
  114.     return FALSE;
  115.     }
  116.   
  117.   SetIoErr(0L);
  118.   FWrite(fhandle,&rid,sizeof(rid),1);
  119.   err=IoErr();
  120.   if(err)
  121.     {
  122.     Close(fhandle);
  123.     return FALSE;
  124.     }
  125.   
  126.   SetIoErr(0L);
  127.   FWrite(fhandle,&rdcount,sizeof(rdcount),1);
  128.   err=IoErr();
  129.   if(err)
  130.     {
  131.     Close(fhandle);
  132.     return FALSE;
  133.     }
  134.   
  135.   SetIoErr(0L);
  136.   FWrite(fhandle,&nrd[0],sizeof(struct NewRouteData),rdcount);
  137.   err=IoErr();
  138.   if(err)
  139.     {
  140.     Close(fhandle);
  141.     return FALSE;
  142.     }
  143.   
  144.   Close(fhandle);
  145.   return TRUE;
  146. }
  147.  
  148. BOOL RedoMemory(ULONG NeededCityEntries, ULONG NeededRouteEntries)
  149. {
  150.   ncd=malloc(sizeof(struct NewCityData)*NeededCityEntries);
  151.   nrd=malloc(sizeof(struct NewRouteData)*NeededRouteEntries);
  152.  
  153.   if(ncd && nrd) return TRUE;
  154.   
  155.   if(ncd) free(ncd);
  156.   if(nrd) free(nrd);
  157.   
  158.   return FALSE;
  159. }
  160.  
  161. void Convert(void)
  162. {
  163.   ULONG i;
  164.   
  165.   for(i=0;i<cdcount;i++)
  166.     {
  167.     memset(&ncd[i],'\0',sizeof(ncd[i]));
  168.     
  169.     strcpy(ncd[i].CityName,cd[i].CityName);
  170.     strcpy(ncd[i].StateName,cd[i].StateName);
  171.     
  172.     ncd[i].CityID=cd[i].CityID;
  173.     ncd[i].Intersection=cd[i].Intersection;
  174.     ncd[i].CoordsExist=cd[i].CoordsExist;
  175.     ncd[i].CityPos.latitude=cd[i].CityPos.latitude;
  176.     ncd[i].CityPos.longitude=cd[i].CityPos.longitude;
  177.     }
  178.   
  179.   for(i=0;i<rdcount;i++)
  180.     {
  181.     memset(&nrd[i],'\0',sizeof(nrd[i]));
  182.     
  183.     strcpy(nrd[i].Hiway,rd[i].Hiway);
  184.     strcpy(nrd[i].Exits[0],rd[i].Exits[0]);
  185.     strcpy(nrd[i].Exits[1],rd[i].Exits[1]);
  186.     
  187.     nrd[i].RouteID=rd[i].RouteID;
  188.     nrd[i].CityID[0]=rd[i].CityID[0];
  189.     nrd[i].CityID[1]=rd[i].CityID[1];
  190.     nrd[i].Directions[0]=rd[i].Directions[0];
  191.     nrd[i].Directions[1]=rd[i].Directions[1];
  192.     nrd[i].Distance=rd[i].Distance;
  193.     nrd[i].Speed=rd[i].Speed;
  194.     nrd[i].SpeedCode=rd[i].SpeedCode;
  195.     nrd[i].Units=rd[i].Units;
  196.     }
  197. }
  198.  
  199. int main(void)
  200. {
  201.   BOOL ok;
  202.   
  203.   ok=OpenDatabase("USA-temp3.route");
  204.   if(ok)
  205.     {
  206.     ok=RedoMemory(cdcount,rdcount);
  207.     if(ok)
  208.       {
  209.       Convert();
  210.       ok=SaveDatabase("USA-temp.route");
  211.       }
  212.     }
  213.   
  214.   if(ok) printf("Success\n");
  215.     else printf("Failure\n");
  216.   
  217.   return(ok ? 0 : 20);
  218. }
  219.